<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 这是一个受限的线性结构 -->
    <title>队列结构-Queue</title>
    特点：
    1. 先进先出 FIFO
    2. 只能在表的后端添加元素
    3. 只能在表的前端删除元素
</head>

<body>
    <script>
        /*
         * 封装一个队列
         */
        class Queue {
            constructor() {
                this.items = []
            }
            enQueue(item) {
                this.items.push(item)
            }
            deQueue() {
                return this.items.shift()
            }
            front() {
                return this.items[0]
            }
            isEmpty() {
                return this.items.length == 0
            }
            size() {
                return this.items.length
            }
            toString() {
                var resultStr = ''
                for (let i = 0; i < this.items.length; i++) {
                    resultStr += this.items[i] + ''
                }
                return resultStr
            }
        }
        // 击鼓传花
        function getLastPerson(list, num) {
            const queue = new Queue()
            for (let i = 0; i < list.length; i++) {
                const element = list[i];
                queue.enQueue(element)
            }
            let i = 1
            while (queue.size() != 1) {
                if (i == num) {
                    queue.deQueue()
                    i = 1
                } else {
                    queue.enQueue(queue.deQueue())
                    i++
                }
            }
            console.log(`value:${queue.front()}, index:${list.indexOf(queue.front())}`)
        }
        // 1, 2, 3, 4, 5
        // 1. 23451
        // 2. 34512
        // 3. 4512
        // 4. 5124
        // 5. 1245
        // 6. 245
        // 7. 452
        // 8. 524
        // 9. 24
        // 10. 42
        // 11. 24
        // 12. 4
        console.log(getLastPerson([1, 2, 3, 4, 5], 3))
    </script>
</body>

</html>